from functools import wraps


def cache(func):  # 装饰器
    store = {}  # 外部变量

    @wraps(func)
    def _(n):  # 闭包函数
        if n in store:
            return store[n]
        else:
            res = func(n)
            store[n] = res
            return res
    return _


@cache
def f(n):  # 斐波那契数列
    if n <= 1:
        return 1
    return f(n - 1) + f(n - 2)
